home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / pctjag86.arc / PDISKIO.ASM < prev    next >
Assembly Source File  |  1986-05-10  |  5KB  |  111 lines

  1.         NAME    PDISKIO
  2.         PAGE    60,132
  3. ;****************************************************************;
  4. ;                                                                ;
  5. ;       PHYSICAL DISK I/O                                        ;
  6. ;                                                                ;
  7. ;****************************************************************;
  8.  
  9. _TEXT   SEGMENT  BYTE PUBLIC 'CODE'
  10. _TEXT   ENDS
  11. CONST   SEGMENT  WORD PUBLIC 'CONST'
  12. CONST   ENDS
  13. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  14. _BSS    ENDS
  15. _DATA   SEGMENT  WORD PUBLIC 'DATA'
  16. _DATA   ENDS
  17. DGROUP  GROUP   CONST,  _BSS,   _DATA
  18.         ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP, ES: DGROUP
  19.  
  20. _TEXT           SEGMENT
  21.  
  22. ;****************************************************************;
  23. ;                                                                ;
  24. ;       char                                                     ;
  25. ;       disk_io(cmd, drive, buf, count, sector, head, cylinder)  ;
  26. ;                4     6     8     10     12     14     16       ;
  27. ;****************************************************************;
  28.  
  29.                 PUBLIC  _DISK_IO
  30. _DISK_IO        PROC    NEAR
  31.  
  32.         PUSH    BP                              ; SAVE FRAME
  33.         MOV     BP, SP                          ; MAKE NEW FRAME
  34.         PUSH    ES                              ;
  35.         PUSH    SI                              ;
  36.         PUSH    DI                              ;
  37.         MOV     AH, [BP+4]                      ; PICK UP COMMAND
  38.         MOV     DL, [BP+6]                      ; PICK UP DRIVE
  39.         MOV     BX, [BP+8]                      ; PICK UP BUFFER
  40.         PUSH    DS                              ;
  41.         POP     ES                              ;
  42.         MOV     AL, [BP+10]                     ; PICK UP COUNT
  43.         MOV     DH, [BP+14]                     ; PICK UP HEAD
  44.         MOV     CH, [BP+17]                     ; HIGH CYL BITS
  45.         SHR     CX, 1                           ; SHF 2 MSB TO CL
  46.         SHR     CX, 1                           ;
  47.         AND     CL, 0C0H                        ; MASK THEM
  48.         ADD     CL, [BP+12]                     ; ADD IN SECTOR
  49.         INC     CL                              ; PLUS ONE
  50.         MOV     CH, [BP+16]                     ; REST CYL IN CH
  51.         INT     13H                             ; CALL BIOS
  52.         JC      SAVERR                          ; JUMP IF ERROR
  53.         MOV     AH, 0                           ; CLEAR RESULT
  54.         CMP     BYTE PTR [BP+4], 8              ; DRIVE PARAM CMD
  55.         JNE     SAVERR                          ; JUMP IF NOT
  56.         MOV     BX, [BP+8]                      ; RESULTS IN BUF
  57.         MOV     [BX], CL                        ; SECTORS
  58.         AND     BYTE PTR [BX], 03FH             ;
  59.         MOV     BYTE PTR [BX+1], 0              ;
  60.         INC     DH                              ;
  61.         MOV     [BX+2], DH                      ; HEADS
  62.         MOV     BYTE PTR [BX+3], 0              ;
  63.         MOV     [BX+4], CH                      ; CYLINDERS
  64.         SHL     CX, 1                           ;  FIX HIGH BYTE
  65.         SHL     CX, 1                           ;
  66.         AND     CH, 003H                        ;
  67.         MOV     [BX+5], CH                      ;
  68.         MOV     [BX+6], DL                      ; DRIVES
  69.         MOV     BYTE PTR [BX+7], 0              ;
  70. SAVERR: MOV     AL, AH                          ; RESULT IN AX
  71.         MOV     AH, 0                           ;
  72.         POP     DI                              ; RESTORE REGS
  73.         POP     SI                              ;
  74.         POP     ES                              ;
  75.         POP     BP                              ; RESTORE FRAME
  76.         RET                                     ; RETURN
  77.  
  78. _DISK_IO        ENDP
  79.  
  80. ;****************************************************************;
  81. ;                                                                ;
  82. ;       Get the current BIOS clock tick count                    ;
  83. ;                                                                ;
  84. ;       long ticks();                                            ;
  85. ;                                                                ;
  86. ;****************************************************************;
  87.  
  88.                 PUBLIC  _TICK
  89. _TICK           PROC    NEAR
  90.  
  91.         PUSH    BP                              ; SAVE FRAME
  92.         MOV     BP, SP                          ; MAKE NEW FRAME
  93.         PUSH    ES                              ;
  94.         MOV     AX, 0                           ; CLEAR ES TO
  95.         MOV     ES, AX                          ; GET BIOS DATA
  96.         CLI                                     ; DISABLE INTS
  97.         MOV     AX, ES:WORD PTR [046CH]         ; LOW TICK COUNT
  98.         MOV     DX, ES:WORD PTR [046EH]         ; HIGH TICK COUNT
  99.         STI                                     ; ENABLE INTS
  100.         POP     ES                              ; RESTORE REGS
  101.         POP     BP                              ; RESTORE FRAME
  102.         RET                                     ; RETURN
  103.  
  104. _TICK           ENDP
  105.  
  106. ;****************************************************************;
  107.  
  108. _TEXT   ENDS
  109.  
  110.         END
  111.